package LeeJS;

public class J01_Fundamentals {
	
	/*
	
	OOP 프로그램을 개발할때
	현실세계와 같은 객체 모델을 만들어야 함
	예를 들어 급여 프로그램은 직원, 세금, 회사 객체등이 있어야 함
	
	하지만 자바에서 객체는 유일한 데이터 형이 아님
	 -> 기본(원시) 자료형
	자바에서 기본 자료형은 모두 8가지가 있음
	
	처음 6개를 기본 자료형은 숫자를 나타냄
	byte, short, int, long, float, double
	
	자연수, 정수 :  byte, short, int, long
	소수점이 있는 정수 : float, double
	
	char : 단일 문자 저장시 사용
	boolean : 논리 값(참/거짓) 저장시 사용
	
	프로그램 작성시 사용하려는 자료의 크기에 따라 자료형을 적절히 선택
	
	변수 varable
	변수는 데이터가 저장될 장소를 의미
	자바는 엄격하게 자료형을 검사하는 언어임
	따라서, 모든 변수는 자료형이 선언되어야 함
	각각의 변수를 구분하기 위해 변수에 이름을 부여함
	->변수명, 식별자(identifier)라고 함
	
	변수 명명법
	1. 식별자는 자바 문자와 숫자로만 구성, 길이는 무제한임
	단, 식별자의 첫 글자는 문자여야 함(ex : Axxxxx......)
	2. 식별자는 자바의 예약어, boolean 리터럴, null 리터럴이면 안됨
	3. 식별자는 특정범위 scope 내에서 유일해야 함(중복 불가)
	4. 식별자는 대/소문자를 구분함(ex : x2와 X2는 서로 다름)
	
	자바 문자/자바 숫자
	자바 문자는 ASC||(아스키코드) 문자 집합의 소/대 영문자,
	달러($) 문자와 밑줄(_)을 의미
	자바 숫자는 ASC|| 문자 집합의 숫자0~9를 의미
	
	리터럴(literal)
	가끔 프로그램상에서 변수에 값을 할당할 때가 있음
	예를 들어, int 에 숫자 2나 char 에 문자 'a' 처럼
	변수에 값을 할당할 때, 이 값은 컴파일러가 
	이해할 수 있는 형식으로 표현해야 함
	소스코드 상의 값 표현법을 리터럴이라 함
	종류는 기본자료(정수/실수/문자/논리값)형 리터럴
	문자열String 리터럴, 널(null) 문자 리터럴
	
	유니코드(unicode) 또는 ASC||(아스키코드)
	전통적으로 영어권 나라들은 알파벳을 표기하기 위해
	ASC|| 문자집합을 사용, ASC|| 문자집합에서
	각문자는 7비트를 사용하고 총 128개의 문자를 나타낼 수 있음
	
	유럽권 문자 표기를 위해 확장(extended) ASC|| 문자 집합을 사용
	추가적으로 128개의 문자를 정의 (총 256문자)
	하지만, 모든 국가들이 라틴 문자를 사용하지 않음
	동양 문화권에 속한 나라들은 다른 문자 집합을 사용함
	특히 중국 언어 처럼 수 천개의 문자를 나타내기에는 무리가 있음
	
	한편, 한국에서 사용하는 문자 집합 중
	EUC-KR은 8비트 한글 완성형 문자 인코딩
	ISO-2022-KR 이라고도 불림 사용 빈도가 높은 2350자만을 채택함
	기존의 부족했던 완성형 한글을 보완하기 위해서 윈도 95부터
	CP949(MS949) 라는 문자 인코딩을 확장 완성형이라는 명칭으로 도입
	KS C 5601-1987 이라고도 불림
	현대의 모든 한글을 수용하게 됨(8822자 추가)
	
	유니코드는 유니코드 컨소시움이라는 비영리 단체에 개발된 문자 집합
	전 세계 연어의 문자를 하나의 문자 집합에 포함하려 함
	유니코드에 있는 고유 번호로 정확한 문자를 표시
	UTF-8 바이트 가변길이 인쿄ㅗ딩으로 유니코드 문자를 나타냄
	즉, 영어는 3바이트, 한글은 3바이트를 이용함
	대부분 브라우저도 UTF-8 인코딩을 지원함
	
	
	*/
	public static void main(String[] args) {
		//변수 선언 및 값 할당
		//형식은 [자료형] [변수명] = [값(리터럴)];
		
		short birthyear = 1990;
		int birth_year = 1990;
		float pi = 3.14F;
		//실수 리터럴(F)를 의미하는 점미사는 
		//대문자로 표기하는 것이 가독성이 좋음
		long jumin = 1912514121241L;						//주민번호
		//(정수이나 변수가 길기때문에 롱을 써줌)
		//정수 리터럴을(L) 의미하는 점미사는 
		//대문자로 표기하는 것이 가독성이 좋음

		
		char  $1st_name = '이', _2nd_name = '준',
				   _3rd_name = '상', _grade = '수';
		
		boolean ismale = true, _isMarried = false;
		
		/* 동일한 자료형을 가지는 변수는 ','를 
		    이용해서 다중 변수 선언이 가능
		    하지만, 가독성이 떨어지기 때문에 비추!   */
		
		char code1 = '\uC790';		//유니코드
		char code2 = '\uBC14';
		char symbol1 ='\u263A';
		char symbol2 ='\u2639';

		//변수 값 출력
		//자바 표준 출력문 System.out.println()
		//System.out.println(변수명);
		System.out.println(birthyear);
		System.out.println(birth_year);
		System.out.println(pi);
		System.out.println(jumin);
		System.out.print($1st_name);
		System.out.print(_2nd_name);
		System.out.println(_3rd_name);
		System.out.println(ismale);
		System.out.println(_isMarried);
		System.out.println(_grade);
		System.out.println(code1);
		System.out.println(code2);
		System.out.println(symbol1);
		System.out.println(symbol2);
		
		
		/* //변수 선언후 및 자료형 선언 및 할당
		//[자료형] [변수명];
		short birthyear;				//생년(정수)
		int birth_year;
		float pi;								//원주율(실수)
		long jumin;						//주민번호
														//(정수이나 변수가 길기때문에 롱을 써줌)
		
		char  $1st_name; 			//이름
		char  $2nd_name;
		char  $3rd_name;
		char grade;						//학점
		
		boolean ismale; 				//성별
		boolean isMarried;		//결혼여부
		
		//변수에 값을 할당
		//변수명 = 값(리터럴);
		
		birthyear = 1990;
		birth_year = 1990;
		
		//pi = 3.14;							//오류 발생! 아래 참고
				//실수 리터럴은 기본적으로 double 형으로 인식
				//double 형 값을 float 형 변수에 담으려 하니 오류 발생
				//오류 발생 - 따라서, float 리터럴임을 의미하는 접미사 f를 추가
		pi = 3.14f;
				//f 를 붙이고 나면 float 리터럴임을 의미하므로 오류 사라짐
		//jumin = 1912514121241;  //오류 발생! 아래 참고
				//정수 리터럴은 기본적으로 int 형으로 인식
				//int 형 값을 long 형 변수에 담으려 하면 오류 발생
				//따라서, long 리터럴임을 의미하는 접미사 l을 추가
		jumin = 1912514121241l;
				//l 을 붙이고 나면 long 리터럴임을 의미하므로 오류 사라짐
		
		$1st_name = '이';			//문자 리터럴은 양쪽에 '를 사용
		$2nd_name = '준';
		$3rd_name = '상';
		grade = '수';
		
		ismale = true;
		isMarried = false; 
		
		System.out.println(birthyear);
		System.out.println(birth_year);
		System.out.println(pi);
		System.out.println(jumin);
		System.out.println($1st_name);
		System.out.println($2nd_name);
		System.out.println($3rd_name);
		System.out.println(ismale);
		System.out.println(isMarried);
		System.out.println(grade); */

	}

}